// 使用express框架构建web服务
// 1 引入express
const express = require("express");
// 引入在Express框架中使用的session
const session = require("express-session");
// 引入MongoDB数据库操作的MongoStore
const MongoStore = require('connect-mongo');
// 初始化商品信息
const goodsList = [
    {id:"284404", name:"小米11青春活力版", price:1399.00},
    {id:"459884", name:"联想ThinkBook 16", price:5729.00},
    {id:"166442", name:"欧普触控调光台灯", price:66.00},
    {id:"316438", name:"罗技M186无线鼠标", price:49.00}
];
// 2. 创建app应用对象 
const app = express();

// 配置模板引擎
app.set("view engine" , "ejs");
// 配置模板的存放目录
app.set("views","./views");

// 通过中间件配置session的使用
app.use(session({
    name: 'sid',   //设置cookie的name，默认值是：connect.sid
    secret: 'atguigu', //参与加密的字符串（又称签名）加盐（干扰）
    saveUninitialized: false, //是否为每次请求都设置一个cookie用来存储sessionid
    resave: true,//是否在每次请求时重新保存session
    store:MongoStore.create({
        mongoUrl: 'mongodb://127.0.0.1:27017/project' //数据库的连接配置
    }),
    cookie: {
        httpOnly: true, // 开启后前端无法通过 JS 操作
        maxAge: 1000 * 300 // 这一条 是控制 sessionID 的过期时间的！！！
    },
}));

// 3. 设置路由
// （get /count） 使用session实现一个计算器
app.get("/count", (req, res) => {
    let count = 0;
    // 尝试从session获取计数信息
    if(req.session.m){
        count = req.session.m; // 读出来
    }
    count++;
    // 将数值放置到session中
    req.session.m = count; // 放回去
    res.send(`<h1>Session计算器：你是第${count}次访问本页面</h1>`);
});

//（get  /） 首页
app.get("/", (req, res) => {
    res.render("index",{goodsList});
});
//（get  /add） 添加购物车
app.get("/add", (req, res) => {
    // 完成将要购买的商品信息放入到session中
    // 获取商品id号
    let id = req.query.gid;
    // 获取要购买的商品（通过id号从goodsList中获取）
    //console.log(goodsList.filter(item => item.id == id)[0]);
    let goods = {...goodsList.filter(item => item.id == id)[0]};
    // 判断session是否存在购物车，若没有放一个
    if(req.session.cartList == undefined){
        req.session.cartList = {};
    }
    // 判断购物车中是否存在当前要购买的商品
    if(req.session.cartList[id]){
        // 购物车已存在要购买商品
        req.session.cartList[id].m++;
    }else{
        // 将商品放进购物车中
        goods.m = 1; //初始化购买量
        req.session.cartList[id] = goods;
    }
    
    res.redirect("/show");
});
//（get  /show） 查看购物车
app.get("/show", (req, res) => {
    // 尝试获取购物车中的商品，没有没有则返回一个空对象
    const cartList =  req.session.cartList ? req.session.cartList:{}
    res.render("show",{cartList});
});
//（get  /clear） 清空购物车
app.get("/clear", (req, res) => {
    req.session.cartList = {}
    res.redirect("/show");
});
//（get  /del）删除购物车中的一个商品
app.get("/del", (req, res) => {
    delete req.session.cartList[req.query.gid]
    res.redirect("/show");
});



// 4. 设置监听端口，启动服务
app.listen(3000, ()=>{
    console.log("服务已启动，端口：3000");
})